package cpr.bean.dao;

import java.util.ArrayList;

import org.hibernate.HibernateException;
import org.hibernate.SessionFactory;

import cpr.beans.modelo.Cliente;
import cpr.beans.modelo.Factura;
import cpr.excepciones.DataBaseInvalidDataException;
import cpr.hbt.HibernateUtil;




public class OficinaVentaDAO extends AbstractDAO{
	
	private static OficinaVentaDAO instancia = null;
	private static SessionFactory sf = null;
	
	public OficinaVentaDAO(){
		//empty
	}
	
	public static OficinaVentaDAO getInstancia(){
		if(instancia == null){
			sf = HibernateUtil.getSessionFactory();
			instancia = new OficinaVentaDAO();
		} 
		return instancia;
	}
	
	public void grabarCliente(Cliente cliente){
		almacenaEntidad(cliente);
	}

	public Cliente getCliente(Cliente cl) throws DataBaseInvalidDataException{
		return getEntidad(cl.getIdCliente(), Cliente.class); 
	}
	
	public Cliente getCliente(int idCliente) throws DataBaseInvalidDataException{
		return getEntidad(idCliente, Cliente.class); 
	}
	
	public Cliente getClientePorId(int idCliente) throws DataBaseInvalidDataException{
		return getEntidad(idCliente, Cliente.class); 
	}
	
	public void eliminarCliente(Cliente cl) throws HibernateException{
		removerEntidad(cl);
	}

	public ArrayList<Factura> getFacturas() {
		return (ArrayList<Factura>) getListaEntidades(Factura.class);
	}

	public boolean existeCliente(Cliente cliente) {
		if(cliente.getIdCliente()>0)
			if(getEntidad(cliente.getIdCliente(), Cliente.class) !=null)
				return true;
		if(cliente.getCuil() != null && !cliente.getCuil().isEmpty()){

			Cliente c = null;
			try{
				sesion = HibernateUtil.getSessionFactory().openSession();
				c = (Cliente) sesion.createQuery(
						"From Cliente where cuil = :cuil").setParameter("cuil", cliente.getCuil()).uniqueResult();
				
			}
		catch(HibernateException he){
			manejaExcepcion(he);
		}finally{
			sesion.close();
		}
		if(c !=null)
			return true;
	}
	return false; 
	}

}
